package com.design_pattern._03_behavioral._07_chain;

import java.util.Arrays;
import java.util.List;

/**
 * 这解决了耦合度高的问题，封装了单独的方法用于各个工序
 * 但是，依旧耦合度过高，修改某个工序、增加工序，修改会影响到其他的代码
 * 解决办法，每个工序写到单独的类中，然后把他们注册在一起，通过for循环执行任务（责任链、链式责任、任务）
 */
public class V2 {
    public static void main(String[] args) {
        Canned canned = new Canned();
        // 开始对罐头的操作
        System.out.println("封装方法 开始制作罐头");
        check(canned);
        clear(canned);
        cut(canned);
        make(canned);
        close(canned);
        store(canned);

        // 方法2，改为把每个责任封装到单独的类中，解耦更彻底
        System.out.println("方法2");
        V2Filter f1 = new CheckV2Filter();
        V2Filter f2 = new ClearV2Filter();
        V2Filter f3 = new CutV2Filter();
        V2Filter f4 = new MakeV2Filter();
        V2Filter f5 = new CloseV2Filter();
        V2Filter f6 = new StoreV2Filter();
        List<V2Filter> filterList = Arrays.asList(f1, f2, f3, f4, f5, f6);
        filterList.forEach(filter->filter.doFilter(canned));
    }

    private static void check(Canned canned) {
        System.out.println("100行代码，进行检查");
    }

    private static void clear(Canned canned) {
        System.out.println("100行代码，进行清洗");
    }

    private static void cut(Canned canned) {
        System.out.println("100行代码，进行切片");
    }

    private static void make(Canned canned) {
        System.out.println("100行代码，进行制作罐头");
    }

    private static void close(Canned canned) {
        System.out.println("100行代码，进行封装");
    }

    private static void store(Canned canned) {
        System.out.println("100行代码，进行储备");
    }
}

